home *** CD-ROM | disk | FTP | other *** search
/ Amiga Developer CD v1.1 / Amiga Developer CD v1.1 - May 1996 (1996)(Schatztruhe)[!].iso / Contributions / IAM / Networking / Envoy-2.0 / obs / Project_Overview < prev    next >
Text File  |  1994-12-22  |  26KB  |  600 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.                                     Envoy
  19.  
  20.                              DO NOT REDISTRIBUTE
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.                             Developer's  Overview
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.                                    8/21/92
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.                             Amiga Networking Group
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53. Developer's Overview
  54.  
  55.  
  56.  
  57. This document is a collection of select pages from the Commodore internal
  58. product description for Envoy.  It is provided as a background text for
  59. development to Envoy, as well as an indication of the directions Commodore
  60. intends to take with Envoy.  This text is included only as a courtesy to
  61. developers. Any and all details within are subject to change.
  62.  
  63.  
  64.  
  65.  
  66.  
  67.                                    Summary
  68.  
  69.  
  70.  
  71. Features
  72.  
  73. The Envoy software package will enable all Amiga computers (including the
  74. A500 and A600) to transparently share filesystems and printers with each other.
  75. It will support third-party networking applications.  Easy configuration for
  76. simple networks, and operation in complex network environments will both be
  77. part of the initial package. Security features will unobtrusively discourage
  78. unauthorized use of network resources.  The Amiga GUI will be used extensively
  79. to make the package easy to configure and to use.
  80.  
  81.  
  82.  
  83. Hardware Requirements
  84.  
  85. Envoy makes use of the SANA-II Network Device Driver Specification, allowing
  86. the package to be used with any networking hardware that has a compliant
  87. device driver.  Envoy can be used on any 512k Amiga running 2.0 or better.
  88.  
  89.  
  90.  
  91. Availability & Distribution
  92.  
  93. Information on the future availability of Envoy, including plans for
  94. distribution is not available at this time.
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.     The diagram below gives an overview of the Envoy project architecture.
  104.     The sections which follow provide some additional details.
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111.         +----------------+      +-----------------+     +--------------+
  112.         |                |      |                 |     |              |
  113.         |  Applications  |      |  Printer Svcs.  |     |  Network FS  |
  114.         |                |      |                 |     |              |
  115.         +----------------+      +-----------------+     +--------------+
  116.            |        |                   |                 |   |     |
  117.            |        |                   |          +------+   |     |
  118.            |        |                   |          |          |     |
  119.            |    +---------------------------------------+     |     |
  120.            |    |                                       |     |     |
  121.            |    |  Services Manager & services.library  |     |     |
  122.            |    |                                       |     |     |
  123.            |    +---------------------------------------+     |     |
  124.            |            |                       |             |     |
  125.            |            |                       |             |     |
  126.            |            |                       |             |     |
  127.            |            |                     +-----------------+   |
  128.            |            |                     |                 |   |
  129.            |            |                     |  User Accounts  |   |
  130.            |            |                     |                 |   |
  131.            |            |                     +-----------------+   |
  132.            |            |                              |            |
  133.            |            |                              |            |
  134.            |            |                              |            |
  135.         +--------------------------------------------------------------+
  136.         |                                                              |
  137.         |                        nipc.library                          |
  138.         |                                                              |
  139.         +--------------------------------------------------------------+
  140.                                       |
  141.                                       |
  142.                                       |
  143.                            +--------------------+
  144.                            |                    |
  145.                            |   SANA-II Drivers  |
  146.                            |                    |
  147.                            +--------------------+
  148.  
  149.  
  150.  
  151.  
  152.                           nipc.library Architecture
  153.  
  154.  
  155.  
  156. The nipc.library is the communications workhorse and largest piece of Envoy.
  157. It provides a Transaction-based reliable communications path between multiple
  158. Amigas, above any compliant SANA II device.  To understand exactly where the
  159. nipc.library fits into the broad APPN picture, one needs to have a general
  160. understanding of the different layers that define the nipc.library and it's
  161. interactions with others.  As a reference, please note figure A.
  162.  
  163.                                                    As figure A shows, the
  164.                                                    nipc.library sits directly
  165.         +--------------+  +------------+           above the device drivers
  166.         | Envoy        |  | Stand      |           for each piece of
  167.         | Applications |  | Alone Apps.|           networking hardware in
  168.         +--------------+  +------------+           use, and directly below
  169.  NIPC API----->    \         /                     either applications or
  170.         +------------------------------+           another library.  Some
  171.         |         nipc.library         |           applications may only
  172.         +------------------------------+           require the ability to
  173.  S-II Std Interface-->  |                          transmit and receive data
  174.         +------------------------------+           reliably - and not require
  175.         |     SANA-II Device Drivers   |           some of the more complex
  176.         +------------------------------+           features that higher levels
  177.                         |                          of Envoy provide.  Thus,
  178.         +------------------------------+           these programs
  179.         |      Networking Hardware     |           communicate directly
  180.         +------------------------------+           with the nipc.library.
  181.  
  182.                     Figure A.
  183.  
  184.                                                    Figure B. provides a more
  185. detailed diagram of exactly what levels make up the nipc.library, as well as
  186. the interfaces between levels.
  187.  
  188.  
  189.  
  190. The lowest level is the specific networking hardware.  This could be anything
  191. from an A2065 ethernet board to a low-speed serial link.  The only requirement
  192. on the hardware is that a SANA II device driver must exist for it.  The hardware
  193. communicates with the next layer up (the SANA II device drivers) through an
  194. arbitrary hardware specific interface.  This is dependant on the exact hardware
  195.  
  196. used, and may vary from implementation to implementation (for example, two
  197. differently designed ethernet boards will communicate with their
  198. device drivers differently - as they            +----------------------------+
  199. may have been designed around                   | 5      Applications        |
  200. different chipsets).                            +----------------------------+
  201.                                               /                |
  202.                                               | +----------------------------+
  203. The second level consists of one or           | | 4   NIPC "Presentation"    |
  204. more SANA II device drivers.   Please         | +----------------------------+
  205. reference the document "SANA-II Network    N  |                |
  206. Device Specification", 5/5/92 for          I  \ +----------------------------+
  207. more specific information.  The SANA II    P  < | 3        RDP & UDP         |
  208. device drivers provide a standard          C  / +----------------------------+
  209. interface between wildly different            |                |
  210. networking software and networking            | +----------------------------+
  211. hardware.                                     | | 2      IP, ICMP, ARP       |
  212.                                               | +----------------------------+
  213.                                               \                |
  214. The third leve marks the beginning              +----------------------------+
  215. of a set of two levels of the proposed          | 1      SANA-II Driver      |
  216. design which are intentionally insulated        +----------------------------+
  217. from the rest of the design.  (These can                       |
  218. be seen in figure B, as levels 3 and 4,         +----------------------------+
  219. as well as the interfaces between 3, 4, and     | 0    Networking Hardware   |
  220. 5.)  The goal in doing this is to prevent the   +----------------------------+
  221. nipc.library from being necessarily tied
  222. to a specific networking protocol.                        Figure B.
  223. For instance, it's entirely
  224. possible to create an nipc.library which is based on Novell NetWare instead of
  225. the protocol stack shown in figure A.  Level two in figure B is similar to the
  226. ISO 'Network' layer in most functions.  It's function is to packetize and route
  227. data from one site to another.  This level is made up of implementations of the
  228. internet protocol (IP), the internet control message protocol (ICMP), and the
  229. address resolution protocol (ARP).
  230.  
  231. Above the Internet Protocol is the Reliable Datagram Protocol - which makes up
  232. level three.  RDP provides reliability and sequencing, among other features, to
  233. the datagram service.
  234.  
  235. Level four contains the NIPC Presentation layer.  Specifically, this level
  236. provides the services specified in the nipc.library Autodocs, based on the
  237. services provided to it by lower levels (RDP and level four, in this instance).
  238. Communication to the next higher level is provided through the interface
  239. defined in the previously mentioned standard.
  240.  
  241. While a layered model is an excellent method by which one may understand
  242. networking protocols, it's a decidedly poor way to implement a protocol stack.
  243. In light of this, levels two, three, and four are not entirely distinct.
  244. Communication between these levels is done with a buffering scheme that's
  245. designed to minimize data copying.
  246.  
  247. The library itself contains everything from the SANA II interface up
  248. through the NIPC API (this is shown bracketed on figure B).
  249.  
  250.  
  251.  
  252.  
  253.                              nipc.library Overview
  254.  
  255.  
  256. Definition
  257.  
  258. The nipc.library provides reliable, transaction-oriented networking abilities
  259. to an Amiga, with a familiar API.
  260.  
  261. Concepts
  262.  
  263. To fully understand the library, a knowledge of a few essential NIPC concepts
  264. is required:
  265.  
  266. Entity: A communications endpoint.  A single Entity can be part of a number of
  267. different communications paths - meaning that one Entity may be communicating
  268. with many other Entities at the same time.  While it's useful for the purposes
  269. of descriptions to illustrate a pair of Entities communicating, it's important
  270. to understand that this isn't a limitation.  An Entity is identified by both
  271. it's name, and the name of the machine on which it exists.
  272.  
  273. Communications Path: An imaginary line drawn between two Entities defining a
  274. line of data transfer.
  275.  
  276. Transaction: The process used to transfer data in NIPC.  A Transaction is made
  277. up of two distinct phases - the time in which a Transaction is a request and
  278. the time in which it is a response.  A Transaction always takes place on a
  279. communications path between two Entities.  See Figure A. as a reference.
  280.  
  281.  
  282.                                     Request
  283.             +-------------+  ------------------->  +-------------+
  284.             |             |                        |             |
  285.             |  Entity A   |                        |  Entity B   |
  286.             |             |                        |             |
  287.             +-------------+  <-------------------  +-------------+
  288.                (source)             Response            (dest)
  289.  
  290.                                 Figure A.
  291.                 The flow of a Transaction between Entities.
  292.  
  293.  
  294. Request: The first phase of a Transaction, where a source Entity (Entity A,
  295. above) sends a request packet to a destination Entity (Entity B, above).  A
  296. Request can be identified by a single-byte command and a variable length data
  297. section.
  298.  
  299. Response: The second phase of a Transaction, where a destination Entity
  300. processes a request packet, provides an Error code, and (if required) provides
  301. a variable length data section.
  302.  
  303.  
  304. Operation
  305.  
  306. The nipc.library provides operations for communicating between Entities,
  307. regardless of whether the communications path involves transferring data
  308. from one machine to another, or merely transferring data between two Entities
  309. on a single machine.  The operations as seen by the application program are
  310. identical, though the library obviously processes the data in different ways.
  311.  
  312. Figure B. shows the modelling of how a Transaction appears when operated
  313. through a networked device.
  314.  
  315.  
  316.                                    Network
  317.                                      \ \
  318.             +-------------+  ------->/ /-------->  +-------------+
  319.             |             |          \ \           |             |
  320.             |  Entity A   |          / /           |  Entity B   |
  321.             |             |          \ \           |             |
  322.             +-------------+  <-------/ /<--------  +-------------+
  323.                                      \ \
  324.  
  325.                                   Figure B.
  326.                          A Transaction's conceptual
  327.                             flow over a network.
  328.  
  329. When refer encing the diagram above, keep in mind that this is only a
  330. model -- the transfer of data only appears to work in this way.  Knowledge
  331. of this model is all that is necessary for using the library.  While this
  332. model is straightfoward and simple enough to expect developers to understand
  333.  thoroughly, it's too simplistic to use for the actual library
  334. implementation - which presents a more complex situation.  However, the
  335. model serves an important role by insulating the developer from the
  336. complexities of networking.  In our implementation, for each communications
  337. path in use there exists something called a Link Entity.  It is between
  338. these Link Entities that networked communications actually occur.  Each
  339. Entity may have several Link Entities -- one for the local side of each
  340. communications path.  This scheme is shown in Figure C.  This scheme lends
  341. itself quite well to NIPC.  Each Link Entity might be considered a local
  342. extension of the Entity on the other side of the communications path.
  343. For instance, the leftmost Link (shorthand for "Link Entity") in Figure C.
  344. might be considered the local extension of Entity B.  Thus, for library
  345. function calls, when a program attempts to reference a remote Entity (one
  346. on another machine), it actually references the Link that symbolizes the
  347. remote Entity.  The networking portion of nipc.library fills in the rest.
  348.  
  349.                                    Network
  350.                                +----+\ \+----+
  351.             +-------------+  ->|    |/ /|    |-->  +-------------+
  352.             |             |    |    |\ \|    |     |             |
  353.             |  Entity A   |    |LINK|/ /|LINK|     |  Entity B   |
  354.             |             |    |    |\ \|    |     |             |
  355.             +-------------+  <-|    |/ /|    |<--  +-------------+
  356.                                +----+\ \+----+
  357.  
  358.                                   Figure C.
  359.                            A Transaction's actual
  360.                             flow over a network.
  361.  
  362. For a local transaction (where the source and destination Entities are on
  363. the same machine), there's very little overhead; the Transaction structure
  364. is simply passed to the destination Entity.
  365.  
  366.  
  367.  
  368.                                 Envoy Services
  369.  
  370. Introduction
  371.  
  372. One of the problems when writing client-server applications is determining
  373. exactly how the client is supposed to initiate a connection with a server.
  374. Another problem is deciding how and when the server's process is to be
  375. started.  It would seem desirable to have a system that provided a
  376. standard way to handle both problems.  This is where the Envoy Services
  377. system comes into play.
  378.  
  379. The Envoy Services system is designed to standardize the way in which nipc
  380. client applications initiate connections with nipc servers.  This is done
  381. by providing a services.library that deals with locating the requested service
  382. on the remote machine and making the connection to the server.
  383.  
  384. The other problem, that of how and when to start servers, is handled on
  385. the "server side" of the connection via the Envoy Services Manager.  The
  386. Envoy Services Manager receives requests for services from the client machine
  387. and then passes this information on to an Envoy Service which then takes
  388. any actions that are required to activate the server.
  389.  
  390. The Envoy Services themselves are implemented as Amiga shared libraries.
  391. By using this model, Services may be dynamically loaded from disk, and may
  392. also be flushed if they are inactive.  Services also make use of special
  393. library LVO's that are used to start services, query the service, etc.
  394.  
  395. Connection to a Service
  396.  
  397. The first step in connecting to a service is to open nipc.library and the
  398. services.library.  You must use nipc.library to create the Entity that
  399. you will be using for your side of the communications path. Then, you call
  400. the services.library function FindService() which will make an attempt to
  401. connect to the service you are requesting to use.
  402.  
  403. Example:
  404.  
  405.      ...
  406.  
  407.      if(svc_entity = FindService("Cruncher","Printer Service",my_entity,
  408.                                  FSVC_UserName,"Joe",
  409.                                  FSVC_Password,"Joe's Password",
  410.                                  FSVC_Error, &error_code,
  411.                                  TAG_DONE)
  412.      {
  413.         ...
  414.  
  415. FindService() requires that you specify the name of the host that the
  416. service you want to use is located on (in the above case, "Cruncher") ,
  417. the name of the service ("Printer Service"), and the Entity that you
  418. will use for your side of the connection.  You may also optionally
  419. specify a user's name, a user's password or a pointer to a ULONG that
  420. will be filled in with an error code (if any) if the connection failed.
  421. For more information, please see the services.library/FindServce()
  422. autodoc.
  423.  
  424.  
  425. Disconnection from a Service
  426.  
  427. To disconnect from a Service you simply call the services.library
  428. function LoseService() with a pointer to the Entity returned by
  429. FindService().
  430.  
  431. Example:
  432.  
  433.         ...
  434.         LoseService(svc_entity);
  435.         ...
  436.  
  437.  
  438. Writing a new Service
  439.  
  440. Before you write a service, you should have a good grasp on writing
  441. Amiga shared libraries.  An example shared library can be found in the
  442. Amiga Libraries RKM.
  443.  
  444. Each Service must implement at least two LVO's that are used by the
  445. Envoy Services Manager and it's configuration tool.  These two LVO's
  446. are StartService() and GetServiceAttrs().  StartService() is called by
  447. Services Manager when there is a new request for a service from a client.
  448. The second call, GetServiceAttrs() is used by the Services Manager
  449. configuration tool to determine the name of your service (not to be
  450. confused with your Service's filename).
  451.  
  452. When the Services Manager calls your StartService() function, you must
  453. take whatever steps are required to start providing your service to the
  454. requesting client.  You will be passed information such as the name of
  455. the user and his password.  You will also be passed a pointer to string
  456. that you are to fill in with the name of the Entity that the client should
  457. connect to.
  458.  
  459. Depending on how you are designing your service, you may or may not need
  460. to start a new task for each client that connects to you.  You will need
  461. at least one task, however. There currently is no way to have a task-less
  462. service.
  463.  
  464. When your StartService() function returns, the Services Manager will
  465. reply to the client's request for service with the name of the Entity
  466. it should connect to or will return an error code if you could not start
  467. the service for some reason.
  468.  
  469. The best way to see how all of this works is to examine the source code
  470. for the print spooler service and it's client.  These two pieces of code
  471. detail some of the finer points with writing a service that haven't been
  472. covered in this section.
  473.  
  474. Installing a Service
  475.  
  476. All you have to do to make the Services Manager start accepting
  477. requests for your service is to run the Services Manage configuration
  478. tool and add your service.
  479.  
  480.  
  481.  
  482.  
  483.                              NIPC Network Realms
  484.  
  485.  
  486.  
  487. Nipc.library is designed to work well in both a single physical network and in
  488. internets.  In a situation where there is only one physical networks with a
  489. small number of machines, NIPC will work without setting up a Realm.  However,
  490. when there are many machines on a single network, or when there are many
  491. different physical networks, it is desirable to logically divide the entire
  492. network into Realms. An Realm is a logical grouping of hosts that may exists
  493. on a single network or separate physical networks.  Because of this, Realms
  494. are independent of network topology.  A Realm name can always be optionally
  495. provided before a host name, by preceding the hostname with the Realm name and
  496. and a colon character.  For instance, "siberia:scratchy" references the
  497. Amiga named 'scratchy' in the Realm "siberia".  If a reference is made to a
  498. host without a Realm name, the Realm that the referencer is in is defaulted
  499. to.  If you reference "scratchy", and are in the Realm "siberia" yourself,
  500. NIPC will assume you mean "siberia:scratchy".  However, if you're in a
  501. different Realm -- say "Software Engineering", -- and wish to reference
  502. machine "scratchy", you must specify "siberia:scratchy" -- as providing only
  503. "scratchy" will resolve to "Software Engineering:scratchy", which at best
  504. will fail, and at worst will resolve a different machine (another one named
  505. "scratchy") than you intended.
  506.  
  507. Each Realm must have one host that is acting as a "Realm Server".  This host
  508. is responsible for propagating all Realm queries to all of the physical
  509. networks within a realm.  Because each host in a realm is configured to know
  510. what Realm it is in and its Realm Server's network address is, a Realm Server
  511. does not need to be physically connected to each network in the realm.
  512.  
  513. Network queries are initiated by calling the nipc.library function
  514. NIPCInquiryA().  This function allows applications to send many different
  515. types of queries.  These range from just determining the names of all machines
  516. in a realm, to doing complex queries that can find all machines with exported
  517. filesystems, 68040's, and eight megabytes of ram.  For more information, please
  518. read the autodoc for NIPCInquiryA().
  519.  
  520. If a query sent by a host is for that hosts local network, the query packet is
  521. broadcasted to every machine on that network.  Each machine on that network
  522. will respond to the packet if necessary.
  523.  
  524. If a query is for a specific Realm, the query is sent to the querying host's
  525. Realm Server.  The Realm Server then consults its Realm database to see if it
  526. knows anything about the Realm specified in the query.  If the Server
  527. determines that the Realm is one of those that it controls, it sends broadcasts
  528. to all of the physical networks that are in the specified realm.  Otherwise,
  529. if the Realm specified in the query is controlled by another Realm Server,
  530. the query packet is forwarded to that machine for further processing.
  531.  
  532. An NIPC Realm is configured by starting the NIPC configuration editor.  On the
  533. Realms panel, there are two listview gadgets.  The one on the left is for
  534. setting up realms that the Realm Server is in control of.  The listview on the
  535. right is for telling the Realm Server about other Realm Servers.  Each physical
  536. network in a Realm must have a separate entry in the lefthand listview gadget.
  537.  
  538.  
  539.  
  540.  
  541.  
  542.  
  543.  
  544.  
  545.  
  546.  
  547.  
  548.  
  549.  
  550.  
  551.  
  552.  
  553.  
  554.  
  555.  
  556.  
  557.  
  558.  
  559.  
  560.  
  561.                           Envoy Network Filesystems
  562.  
  563.  
  564.  
  565. The initial Envoy network filesystem is broken into two halves -- a client,
  566. to access files on remote machines; and a server, to allow remote machines to
  567. access local files.  The client and server portions of the filesystem may be
  568. run separately or together, allowing for true peer-to-peer filesystem access.
  569. Both the client and server include security -- a server will not allow a remote
  570. client to create a remote mount unless the username and password pair passed
  571. from the client  is authenticated.
  572.  
  573. Client
  574.  
  575. The client portion of the filesystem is implemented as a standard AmigaDOS
  576. filesystem, and will be designed to translate DOS packets into Transactions.
  577. Each remote filesystem to be accessed will be a volume on the client
  578. filesystem.  Each mount specifies the machine on which to access files, as
  579. well as the directory path to mount on that machine.  Each mounted volume
  580. will create a Workbench icon -- allowing simple Amiga point-and-click access
  581. to remote files and directories.  The user will not see any difference
  582. between a network-mounted filesystem and, say, a hard disk (other than access
  583. speed, depending on the CPU and network hardware being used).  Each remote
  584. mount can automatically be created on system bootup - with no action required
  585. of the user other than initial configuration.
  586.  
  587.  
  588. Server
  589.  
  590. The server portion of the filesystem will translate Transactions initiated by
  591. a remote client into actions taken on a local filesystem.  When a client attempts
  592. to mount a filesystem,  a client-provided username and password pair must be
  593. authenticated to allow access.  When any individual file or directory is
  594. accessed, that user's user-id and any group-ids will be checked against bits
  595. in the multi-user filesystem to determine what access, if any, will be allowed
  596. to the specific file or directory.  The fileserver will be able to successfully
  597. recover from most reboots by automatically re-establishing any mounts, locks,
  598. open files, etc.
  599.  
  600.